Wt3.2.3文档翻译:Wt::Dbo::Query< Result, BindStrategy > 类模板参考,Wt::Dbo::Query< Result, BindStrategy > Class Template Reference
一个数据库查询对象。
这个查询对象从数据库中获取Result 类型的结果。结果可以是任何一种正确地实现了 query_result_traits 的类型。这个库本身已经为基本类型 (参考 sql_value_traits ) 、数据库对象(ptr)和 boost::tuple 实现了这些需求 。
可使用Session::find()来进行简单的查询,而更复杂的查询 (返回任意类型的结果)就要使用 Session::query() 了。
妳可以在查询对象中的任意位置插入'?'作为参数的占位符,然后使用 bind() 来绑定实际的参数值 。
查询结果可使用resultValue()或resultList()来获取。
使用示例:
typedef Wt::Dbo::ptr<Account> AccountPtr;
typedef Wt::Dbo::collection<AccountPtr> Accounts;
Wt::Dbo::Query<AccountPtr> query = session.find<Account>().where("balance > ?").bind(100000);
Accounts accounts = query.resultList();
for (Accounts::const_iterator i = accounts.begin(); i != accounts.end(); ++i)
std::cerr << "Name: " << (*i)->name << std::end;
BindStrategy指定的是如何将参数(如果有的话)绑定到妳的查询对象中。
如果使用动态绑定( DynamicBinding )(默认值)的话,参数与实际结构化查询语言 (sql)语句之间的绑定是延迟发生的 ,直到查询真正执行的时候才绑定。 这会带来一些好处:妳可以使用这个查询对象中提供的辅助函数 ( where() 、 orderBy() 和 groupBy() ) 来构造出查询定义条件 ,并且可将它们与参数绑定功能混用 ;妳可以保留这个查询对象,并且多次运行它,每次可使用不同的参数值,或者在查询结果中遍历。 where() 、 orderBy()和groupBy()都只是便利函数而已,可用来增量式地构造查询对象 ,但是妳完全可以将整个结构化查询语句 (SQL)以单个字符串的形式指定。
当使用直接绑定( DirectBinding )时,参数会直接绑定到底层的结构化查询语句中去 。因此 ,查询条件必须在创建的时候就完整地指定。由于它是依赖于一个结构化查询语句的 ,所以它只能被执行一次 (只能执行一次 resultValue() 或 resultList() ),然后就应当被忽略。使用这种参数绑定策略时 ,妳就不应当持有一个查询对象 (keep a query object around) 了 (因为 ,这样几乎永远不会按照妳设想的方式工作 ) 。
template<class Result, typename BindStrategy = DynamicBinding>
template<typename T >
Query<Result, BindStrategy>& Wt::Dbo::Query< Result, BindStrategy >::bind |
( |
const T & |
value |
) |
将一个值绑定到下一个占位符。
这个函数会将value 绑定到查询条件中的下一个占位符。
睡美人
毛新宇
HxLauncher: Launch Android applications by voice commands